from django.contrib import admin
# Register your models here.
from sa.models import User, Role, CustomerInfo, ProductType, KnowledgeDomain, Article, Comment, ArticleAttachment

from django.contrib.auth import get_user_model
from django.utils.translation import ngettext
from django.contrib import messages

"""
admin.site.site_header 设置网站页头
admin.site.site_title 设置页面标题
admin.site.index_title 设置首页标语
"""

admin.site.site_header = 'FujiFilm SA工作记录系统'
admin.site.site_title = 'SA工作记录MIS'
admin.site.index_title = '欢迎使用SA工作记录系统'


class RoleAdmin(admin.ModelAdmin):
    # 需要显示的字段 list_display
    list_display = ['role_name', 'description']
    # 哪些字段增加链接到修改页面
    list_display_links = ['role_name', ]
    # 增加过滤器
    list_filter = ['role_name']
    # 添加搜索框
    search_fields = ['role_name']
    # 添加可以列表页编辑的字段
    list_editable = []
    # 设置每页显示的记录条数为10
    list_per_page = 10


admin.site.register(Role, RoleAdmin)

# get_user_model 是 Django 提供的一个便捷函数，用于获取当前活动的用户模型。
# 无论你是使用 Django 默认的 User 模型，
# 还是自定义的用户模型（通过继承 AbstractUser 或 AbstractBaseUser），
# get_user_model 都能确保你获取到正确的用户模型类。
User = get_user_model()


class UserAdmin(admin.ModelAdmin):
    # 新建、编辑字段
    fields = ['employee_num', 'username', 'cn_name', 'en_name', 'email',
              'mobile', 'cse_num', 'region', 'city',
              'roles', 'is_active']
    list_display = ['employee_num', 'username', 'cn_name', 'en_name',
                    'mobile', 'region',
                    'is_active', 'is_staff']
    # 哪些字段增加链接到修改页面
    list_display_links = ['employee_num', 'username']
    # 增加过滤器
    list_filter = ['region', 'city', 'is_active']
    # 添加搜索框
    search_fields = ['cn_name', 'en_name', 'employee_num', 'cse_num', ]
    # 添加可以列表页编辑的字段
    list_editable = ['region']
    # 设置每页显示的记录条数为10
    list_per_page = 10

    # 添加自定义 Action
    # Action 是 Django Admin 提供的一种功能，允许管理员在模型列表页中执行批量操作
    # 是将名为 reset_password 的自定义方法添加到 Admin Action 列表中。
    actions = ['reset_password']

    def save_model(self, request, obj, form, change):
        # 新建用户时自动设为 staff
        # if not change:
        #     obj.is_staff = True
        # 处理密码字段
        if 'password' in form.changed_data:
            # 如果密码字段被修改（新建或编辑）
            obj.set_password(form.cleaned_data['password'])
        elif not obj.pk:  # 新建用户但未设置密码
            obj.set_password('x-admin')  # 设置默认哈希密码

        super().save_model(request, obj, form, change)

    def reset_password(self, request, queryset):
        # 重置密码为默认值
        default_password = 'x-admin'  # 设置默认密码
        updated_count = 0
        for user in queryset:
            user.set_password(default_password)
            user.save()
            updated_count += 1
        # 显示成功消息
        self.message_user(
            request,
            ngettext(
                '%d 个用户的密码已重置。',
                '%d 个用户的密码已重置。',
                updated_count,
            ) % updated_count,
            messages.SUCCESS,
        )

    reset_password.short_description = "重置选中用户的密码"  # 设置 Action 的显示名称


admin.site.register(User, UserAdmin)


class CustomerInfoAdmin(admin.ModelAdmin):
    # fields = ['name', 'region', 'status', 'remark']
    # 需要显示的字段 list_display
    list_display = ['name', 'region', 'status']
    # 哪些字段增加链接到修改页面
    list_display_links = ['name']
    # 增加过滤器
    list_filter = ['region', 'status']
    # 添加搜索框
    search_fields = ['name', 'remark']
    # 添加可以列表页编辑的字段
    list_editable = ['region', 'status']
    # 设置每页显示的记录条数为10
    list_per_page = 10


admin.site.register(CustomerInfo, CustomerInfoAdmin)


class ProductTypeAdmin(admin.ModelAdmin):
    list_display = ['name', 'description']
    list_display_links = ['name']
    list_per_page = 10


admin.site.register(ProductType, ProductTypeAdmin)


class KnowledgeDomainAdmin(admin.ModelAdmin):
    list_display = ['name', 'color']
    list_display_links = ['name']
    list_per_page = 10


admin.site.register(KnowledgeDomain, KnowledgeDomainAdmin)


class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title', 'author', 'created_at', 'views']
    list_display_links = ['title']
    list_filter = ['category', 'tags']
    search_fields = ['title']
    list_per_page = 10


admin.site.register(Article, ArticleAdmin)


class CommentAdmin(admin.ModelAdmin):
    list_display = ['article', 'author', 'created_at', 'parent', 'depth']
    list_display_links = ['article']
    ordering = ['id', 'depth']
    list_per_page = 10


admin.site.register(Comment, CommentAdmin)
